package com.lazy.book.service.system.impl;

import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.sz.admin.system.mapper.SysConfigMapper;
import com.sz.admin.system.pojo.dto.sysconfig.SysConfigCreateDTO;
import com.sz.admin.system.pojo.dto.sysconfig.SysConfigListDTO;
import com.sz.admin.system.pojo.dto.sysconfig.SysConfigUpdateDTO;
import com.sz.admin.system.pojo.po.SysConfig;
import com.sz.admin.system.pojo.po.table.SysConfigTableDef;
import com.sz.admin.system.service.SysConfigService;
import com.sz.core.common.entity.PageResult;
import com.sz.core.common.entity.SelectIdsDTO;
import com.sz.core.common.enums.CommonResponseEnum;
import com.sz.core.common.service.ConfService;
import com.sz.core.util.BeanCopyUtils;
import com.sz.core.util.PageUtils;
import com.sz.core.util.Utils;
import com.sz.redis.RedisCache;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.io.Serializable;
import java.util.List;

/**
 * <p>
 * 参数配置表 服务实现类
 * </p>
 *
 * @author sz
 * @since 2023-11-23
 */
@Service
@RequiredArgsConstructor
public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements SysConfigService, ConfService {

    private final RedisCache redisCache;

    @Override
    public void create(SysConfigCreateDTO dto) {
        SysConfig sysConfig = BeanCopyUtils.copy(dto, SysConfig.class);
        save(sysConfig);
    }

    @Override
    public void update(SysConfigUpdateDTO dto) {
        SysConfig sysConfig = BeanCopyUtils.copy(dto, SysConfig.class);
        updateById(sysConfig);
    }

    @Override
    public PageResult<SysConfig> list(SysConfigListDTO queryDTO) {
        QueryWrapper wrapper = QueryWrapper.create().from(SYS_CONFIG);
        if (Utils.isNotBlank(queryDTO.getConfigKey())) {
            wrapper.and(SYS_CONFIG.CONFIG_KEY.like(queryDTO.getConfigKey()));
        }
        if (Utils.isNotBlank(queryDTO.getConfigName())) {
            wrapper.and(SYS_CONFIG.CONFIG_NAME.like(queryDTO.getConfigName()));
        }
        Page<SysConfig> page = page(queryDTO.buildPage(), wrapper);
        return PageUtils.getPageResult(page);
    }

    @Override
    public void remove(SelectIdsDTO dto) {
        CommonResponseEnum.INVALID_ID.assertIsFalse(dto.getIds().isEmpty());
        removeByIds(dto.getIds());
    }

    @Override
    public SysConfig detail(Object id) {
        return getById(id);
    }
}
